iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0

本篇文章同步發表在 HKT 線上教室 部落格,線上影音教學課程已上架至 UdemyYoutube 頻道。另外,想追蹤更多相關技術資訊,歡迎到 臉書粉絲專頁 按讚追蹤喔~

程式碼範例

範例名稱:檢查GPS狀態
開發人員:HKT (侯光燦)
程式語言:Kotlin
開發環境:Android Studio 4.1.2 & Android 11 & Kotlin 1.4.30
授權範圍:使用時必須註明出處且不得為商業目的之使用
範例下載點:點我下載

昨天跟大家介紹,如何獲取到定位權限之後,今天要來跟大家介紹,如何檢查 GPS 是否開啟,在裝置未開啟 GPS 的狀態下,我們可以引導使用者前去裝置設定頁開啟。若已經是開啟裝態,則可以開始獲取經緯度。而如何獲取經緯度的部分,會留在明天再繼續跟大家介紹。今天主要會關注在,如何檢查 GPS 是否開啟。

檢查GPS是否開啟

透過 LocationManager 其中的 isProviderEnabled 方法來檢查GPS是否開啟,若未開啟,則彈跳出詢問視窗,引導使用者前往設定開啟。若已經開啟,則可以開始獲取經緯度。

private fun checkGPSState() {
    val locationManager = mContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        AlertDialog.Builder(mContext)
            .setTitle("GPS 尚未開啟")
            .setMessage("使用此功能需要開啟 GSP 定位功能")
            .setPositiveButton("前往開啟",
                DialogInterface.OnClickListener { _, _ ->
                    startActivityForResult(
                        Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), REQUEST_ENABLE_GPS
                    )
                })
            .setNegativeButton("取消", null)
            .show()
    } else {
        //todo getDeviceLocation()
        Toast.makeText(this, "已獲取到位置權限且GPS已開啟,可以準備開始獲取經緯度", Toast.LENGTH_SHORT).show()
    }
}

輸出結果

引導前往GPS設定開啟

GPS 設定的 callBcak 事件

在前往設定頁上,我們有加入 REQUEST_ENABLE_GPS ,所以在設定返回時會收到 callBcak 事件。這個時候我們再去檢查 GPS 狀態是否開啟。

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {
      ...
        REQUEST_ENABLE_GPS -> {
            checkGPSState()
        }
    }
}

參考資料

HKT 線上教室
https://tw-hkt.blogspot.com/

Freepik
https://www.freepik.com/


那今天【iThome 鐵人賽】就介紹到這邊囉~

順帶一提,KT 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,追蹤喔!也歡迎大家將這篇文章分享給更多人喔。

我們明天再見囉!!!掰掰~


上一篇
Day 23:獲取位置權限
下一篇
Day 25:獲取位置經緯度
系列文
Android 口罩地圖入門實戰 30 天 (使用 Kotlin 程式語言)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言